# coding=utf-8
from Page.login import Login
import pytest
from Resource.config import Config

"""
conftest.py 用法
conftest.py配置需要注意:
conftest.py文件名是不能换的
conftest.py与运行的用例要在同一个package下，并且有__init__.py文件
不需要import导入conftest.py，pytest用例会自动查找
所有同目录测试文件运行前都会执行conftest.py文件
全局的配置和前期工作都可以写在这里，放在某个包下，就是这 个包数据共享的地方。
如果项目的不同目录下有相同名字的conftest.py 文件，里面有相同名字的fixture, 测试用例里面调用的fixture方法，会使用离这个文件最近的一层目录下的conftest.py里面的fixture方法
"""
"""
Fixture 是为了测试⽤例的执⾏，初始化⼀些数据和⽅法
1、类似 setUp, tearDown 功能，但⽐ setUp, tearDown 更灵活
2、直接通过函数名字调⽤或使用装饰器@pytest.mark.usefixtures(‘test1’)
3、允许使用多个Fixture
4、使用 autouse 自动应用，如果要返回值，需要传fixture函数名
5、作用域（session>module>class>function）
-setup-show 回溯 fixture 的执行过程

@pytest.fixture(autouse=True)，默认所有用例都是用此装饰器，function级别的。但是如果需要yield的返回值，则需要将login方法名传入用例作为参数，
另外scope="module"，可以定义setup，teardown范围，还有class，package，session范围。session范围就是就是用例执行开始到用例执行结束。
"""

# @pytest.mark.parametrize("user,password", [["admin", "1"]])
user, password = 'admin', '1'

config = Config()

@pytest.fixture()
def login():
    url = config.conf('url')
    config.log.info("开始登录")
    main = Login(url).goto_main_page(user, password)
    # yield相当于return，return出driver对象后，进行测试，执行完用例后，执行yield后面的语句，相当于teardown
    yield main
    main.quit_browser()
    config.log.info("关闭浏览器")

# items就是获取到的所有用例名称，是个list，然后对items进行各种操作, 下面就是对中文用例进行转码显示中文
# 比如用items.reverse()，翻转用例顺序来执行。
def pytest_collection_modifyitems(session, config, items):
    for item in items:
        item.name = item.name.encode("utf-8").decode("unicode-escape")
        item._nodeid = item.nodeid.encode("utf-8").decode("unicode-escape")
